﻿using AngleSharp.Dom.Html;
using DonetSpider;
using DonetSpider.config;
using DonetSpider.http;
using DonetSpider.Log;
using Microsoft.Extensions.Configuration;
using PuppeteerSharpHttp;
using System;
using System.Linq;

namespace ConsoleApp1
{
    class Program
    {

        static readonly string helpMsg = @"
h   ：   查看命令
exit：   退出
to  ：   前往  to https://www.kanjuji.com/index.php/vod/play/id/974800/sid/7/nid/154.html
sa  ：   页面查询全部 sa a 查询所有节点中a 标签数据
s   ：   页面查询第一个 s a 查询所有节点中第一个a 标签数据
ss  ：   页面查询脚本 ss u3m8 查询所有脚本中包含u3m8 的数据
sv  ：   在线查询电影 sv 完美世界 
st  ：   查询已经存在的任务 st 万 查询任务名称中包含“万”字的任务
n   ：   新建任务 n Kanjuji https://www.kanjuji.com/index.php/vod/play/id/974800/sid/7/nid/154.html 万界独尊
         创建 万界独尊 这个任务 使用 Kanjuji 工具爬取
r   ：   开始一个任务 r 1 开始 id 为1 的任务
si  ：   查询已经存在的任务的明细 si 1 查询任务号1 的明细项目
p   ：   打开浏览器播放任务明细的视频 p 1 播放明细id 为 1 的视频（默认使用本地地址）, p 1 o 播放明细id 为 1 的视频，使用在线地址
";


        static void Main(string[] args)
        {

            //var k = new Kanjuji("https://www.kanjuji.com/index.php/vod/play/id/974800/sid/7/nid/154.html","万界独尊");
            //k.Start();

            var spider = new SimpleSpider().SetDb(new SqliteWriterMovieDb("m3u8")).SetHttp(new HttpHelper().SetLogger(new LogHelper()));
            while (true)
            {
                Console.Write("请输入命令：");
                var codestr = (Console.ReadLine() + "").Split(' ').Where(m => !string.IsNullOrEmpty(m)).Select(m => m.ToLower()).ToList();
                var code = codestr.FirstOrDefault();

                switch (code)
                {
                    case "h":
                    case "H":
                        Console.Write(helpMsg);
                        break;

                    case "exit": // 退出 
                        return;
                    case "to": // 前往  to https://www.kanjuji.com/index.php/vod/play/id/974800/sid/7/nid/154.html
                        spider.ToAsync(codestr).Wait();
                        break;
                    case "sa": // sa a 查询所有节点中a 标签数据
                        spider.QuerySelectorAll(codestr);
                        break;
                    case "s": // s a 查询所有节点中第一个a 标签数据
                        spider.QuerySelector(codestr);
                        break;
                    case "seth": // 查询
                        var h = new PuppeteerSharpHttpHelper();
                        spider.SetHttp(h);
                        break;
                    case "clearh": // 查询
                        spider.SetHttp(null);
                        break;

                    case "ss": //  ss u3m8 查询所有脚本中包含u3m8 的数据
                        spider.ScriptsSelectorAll(codestr);
                        break;
                    case "st": 
                        spider.SelectorTask(codestr);
                        break;
                    case "si":
                        spider.SelectorTaskItem(codestr);
                        break;
                    case "sv":
                        spider.SeachMoive(codestr);
                        break;
                    case "n": 
                    case "N": 
                        spider.NewTask(codestr);
                        break;
                    case "r":
                    case "R":
                        spider.RunTask(codestr);
                        break;
                    case "p":
                        spider.PItem(codestr);
                        break;
                    default:
                        Console.WriteLine("命令有误。查看命令输入 help");
                        break;
                        
                }
            }


            //var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
            //var configuration = builder.Build();
            //SpiderConfig config = new SpiderConfig();
            //configuration.GetSection("SpiderConfig").Bind(config);

            //using (SqliteWriter writer = new SqliteWriter("movgg")) {
            //    new DriectSpider()
            //       .SetConfig(config.Config)
            //       .SetConfig(config.NextPageConfig)
            //       .SetLogger(new LogHelper())
            //       .StartWithUrlAsync(config.MainUrl)
            //       .Wait();
            //}

        }
    }
}
